/*
 * LoginServlet.java
 *
 * Created on May 10, 2007, 2:37 AM
 */

package org.upm;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.StringTokenizer;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Jonathan Gonzalez
 * @version 21/05/2009
 */
public class LoginServlet extends HttpServlet {
    private static final Logger logger =
            Logger.getLogger(LoginServlet.class.getName());
    
    /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException 
    {
        String username = request.getParameter("username");
        request.getSession().setAttribute("username", username);

        Factura factura = new Factura();

        //Puerto de conexión al servidor
        int port = 4444;

        //Localización del servidor.
        String host = "localhost";

        //DatagramSocket que escucha en cualquier puerto.
        DatagramSocket sock = new DatagramSocket();
        logger.info("Socket del cliente creado con éxito.");

        //Array que se va a usar para recibir información
        byte[] data = new byte[1500];

        //Separamos cada campo enviado con puntos
        String datosEnviados = username + ".";
        //Información enviada al servidor
        byte[] info = datosEnviados.getBytes();

        //InetAddress del servidor.
        InetAddress address = InetAddress.getByName(host);

        DatagramPacket peticion = new DatagramPacket(info,info.length,address,port);

        sock.send(peticion);
        logger.info("Petición enviada al servidor");

        //Esperamos la respuesta del servidor de reglas
        DatagramPacket recibido = new DatagramPacket(data, data.length);
        sock.receive(recibido);

        //Recibimos la factura
        StringTokenizer respuesta = new StringTokenizer(new String(recibido.getData()), ".");
        String llamadasMovistar = respuesta.nextToken();
        String segundosMovistar = respuesta.nextToken();
  	    String llamadasVodafone = respuesta.nextToken();
        String segundosVodafone = respuesta.nextToken();
        String llamadasOrange = respuesta.nextToken();
        String segundosOrange = respuesta.nextToken();
        String llamadasYoigo = respuesta.nextToken();
        String segundosYoigo = respuesta.nextToken();
        String precio = respuesta.nextToken();

        factura.setLlamadasMovistar(Integer.parseInt(llamadasMovistar));
        factura.setSegundosMovistar(Integer.parseInt(segundosMovistar));
        factura.setLlamadasVodafone(Integer.parseInt(llamadasVodafone));
        factura.setSegundosVodafone(Integer.parseInt(segundosVodafone));
        factura.setLlamadasOrange(Integer.parseInt(llamadasOrange));
        factura.setSegundosOrange(Integer.parseInt(segundosOrange));
        factura.setLlamadasYoigo(Integer.parseInt(llamadasYoigo));
        factura.setSegundosYoigo(Integer.parseInt(segundosYoigo));
        factura.setPrecio(Integer.parseInt(precio));

        request.getSession().setAttribute("factura", factura);

        //Array que se va a usar para recibir información
        byte[] data2 = new byte[1500];

        //Esperamos la respuesta del servidor de reglas
        DatagramPacket recibido2 = new DatagramPacket(data2, data2.length);
        sock.receive(recibido2);
        //Recibimos la facturaEspecial
        respuesta = new StringTokenizer(new String(recibido2.getData()), ".");
        llamadasMovistar = respuesta.nextToken();
        segundosMovistar = respuesta.nextToken();
  	    llamadasVodafone = respuesta.nextToken();
        segundosVodafone = respuesta.nextToken();
        llamadasOrange = respuesta.nextToken();
        segundosOrange = respuesta.nextToken();
        llamadasYoigo = respuesta.nextToken();
        segundosYoigo = respuesta.nextToken();
        precio = respuesta.nextToken();

        Factura facturaEspecial = new Factura();

        facturaEspecial.setLlamadasMovistar(Integer.parseInt(llamadasMovistar));
        facturaEspecial.setSegundosMovistar(Integer.parseInt(segundosMovistar));
        facturaEspecial.setLlamadasVodafone(Integer.parseInt(llamadasVodafone));
        facturaEspecial.setSegundosVodafone(Integer.parseInt(segundosVodafone));
        facturaEspecial.setLlamadasOrange(Integer.parseInt(llamadasOrange));
        facturaEspecial.setSegundosOrange(Integer.parseInt(segundosOrange));
        facturaEspecial.setLlamadasYoigo(Integer.parseInt(llamadasYoigo));
        facturaEspecial.setSegundosYoigo(Integer.parseInt(segundosYoigo));
        facturaEspecial.setPrecio(Integer.parseInt(precio));

        request.getSession().setAttribute("facturaEspecial", facturaEspecial);

        response.sendRedirect(request.getContextPath() + "/main.jsp");
    }

       private static void sendRequest(int port, String host, DatagramSocket sock, byte[] info) throws IOException{
        
    }
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
    /** Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
    /** Returns a short description of the servlet.
     */
    public String getServletInfo() {
        return "Short description";
    }
    // </editor-fold>
}
